
//2762.不间断子数组
class Solution {
public:
    long long continuousSubarrays(vector<int>& nums) {
        //因为0<=|nums[i1]-nums[i2]|<=2对于数组中每一段都成立，所以区间内最多有3个不同的数
        map<int ,int> mm;   //此处采用map因为我们希望直接拿出来最大值和最小值，
                            //使用unordered_map不能实现，使用map.begin()和map.rbegin()可以实现
        int n=nums.size(),left=0;
        long long ret=0;
        for(int right=0;right<n;right++)
        {
            mm[nums[right]]++;  //入窗口
            while(mm.rbegin()->first-mm.begin()->first>2)  //拿出最大值和最小值进行比较
            {
                if(--mm[nums[left]]==0) mm.erase(nums[left]);
                left++;   //出窗口
            }
            ret+=right-left+1; //更新答案
        }
        return ret;
    }
};